package net.linku.service.impl;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.linku.domain.LAMenu;
import net.linku.model.req.login.UserRequestParams;
import net.linku.repository.LAMenuServiceRepository;
import net.linku.service.LAMenuService;
import net.linku.service.LARoleService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * LAMenuServiceImpl 实现了 LAMenuService 接口，
 * 提供了根据用户ID获取菜单列表的功能。
 * <p>
 * 该类使用了 Spring 的 @Service 注解，标识为一个服务层组件。
 * 使用了 Lombok 的 @Slf4j 注解添加日志功能，@RequiredArgsConstructor 注解生成构造函数。
 * <p>
 * 该类主要包含获取用户菜单的方法。
 *
 * @Author SilenceTian
 * @Date 2024/7/12
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class LAMenuServiceImpl implements LAMenuService {

    // Repository
    private final LAMenuServiceRepository menuServiceRepository;

    // Service
    private final LARoleService laRoleService;

    /**
     * 根据用户请求参数获取菜单列表。
     * 如果用户是超级管理员，则返回所有菜单，否则根据用户ID和租户ID查询菜单。
     *
     * @param userRequestParams 用户请求参数，包含租户ID和用户ID。
     * @return 符合条件的 LAMenu 列表。
     */
    @Override
    public List<LAMenu> getMenusByAccountId(UserRequestParams userRequestParams) {
        List<LAMenu> laMenus;

        // 判断用户是否是超级管理员
        if (laRoleService.isSuperAdmin(userRequestParams)) {
            // 如果是超级管理员，获取所有菜单
            laMenus = menuServiceRepository.list();
        } else {
            // 否则，根据用户ID和租户ID查询菜单
            laMenus = menuServiceRepository.queryMenusByUserId(userRequestParams);
        }

        return laMenus;
    }
}
